import GCJ_CLASS_TYPE = require('./../../common/GCJ_CLASS_TYPE');
import DEFINE = require('./../../common/DEFINE');
import ObjBase = require('./ObjBase');
import GroupObj = require('./GroupObj');
import SJGReplaceGroup=require('./../replace/SJGReplaceGroup');
import SJGTypeSetBoxUtil2=require('./../../typeset/SJGTypeSetBoxUtil2');
import ObjPositionAlign=require('./../base/ObjPositionAlign');

var async  = require( 'async'); // 同步控制
var fs = require('fs')
var CONFIG=require('../../../../common/config');

export  = ReplaceGroupObj;


/**
 *
 * @author 
 * 注意：ReplaceGroupObj的子对象也是Group，每个Group都是可替换数组的一个项目
 */
class ReplaceGroupObj extends GroupObj{
    
    
    public constructor(g?) {
        super(g);
                
        this.ct = GCJ_CLASS_TYPE.CLASS_TYPE_ReplaceGroupObj;
    }
    
    // 获取对象名称
    public getObjetName(): string {
        var g:any = this.getGlobalData().objManager().getReplaceGroupObject(this.id);
        //return g.getKindName();
        return g.getShowInfo();
    }
    
    // 从json对象(注意不是json字符串)中解析
    // 参数：self,true表示只拷贝自身数据，而不拷贝子的数据
    public fromJson(jsonObj,versionId,self?) {
        super.fromJson(jsonObj,versionId,self);

        
        // 加载文档时
        if (this.getGlobalData().docStatus() == DEFINE.DOC_STATUS_LOADING) {
            this.getGlobalData().objManager().saveObject(this);
        }
    }
    
    // 转成json字符串
    public toJson(): string {
        // 去掉父json字符串的头尾
        var superJson = super.toJson();
        superJson = superJson.substr(1,superJson.length - 2);

        var ret = '{';
        ret += superJson;
                    
        ret += '}';
        
        return ret;
    }
    
    // 深度更新id［处理自身和子对象，递归］
    // 参数：idMaps，新旧id的对应关系, 例如：[{oldId:1,newId:2}]
    public deepResetId(idMaps: Array<any>) {
        super.deepResetId(idMaps);
        
        
    }
    // 扩展大小
    // 参数：controlType 控制点类型
    // 参数：ratioX x缩放比例
    // 参数：ratioY y缩放比例
    // 参数：outside true表示操作所在的最外层对象，false表示内部对象
    public expand(controlType: number,ratioX: number,ratioY: number,outside: boolean) {
        super.expand(controlType,ratioX,ratioY,outside);
        
        this.refresh();
    }
    
    // 根据参数计算内部数据：例如文字根据字体字号计算轮廓
    public refresh() {
        // 计算ReplaceGroupObj的内部编组的位置、对齐方式
        var replace:any = this.getGlobalData().objManager().getReplaceGroupObject(this.id);
        replace.advance.count=this.children.length; // 更新advance中的count        
        
        // 计算内部group的个数以及bbox
        var poss: Array<ObjPositionAlign>=SJGTypeSetBoxUtil2.calcPosition(replace.advance,this.pos.w,this.pos.h);
        
        // 更新内部编组的pos,更新子
        for(var i in this.children){
            var one: ObjBase=this.children[i];
            one.setObjPostionByAlign(poss[i]);
            // 更新子
            if(one instanceof GroupObj){
                one.refresh(replace);
            }
        }
        
    }
    // 根据kernelObj上的对齐属性调整内部对象的布局
    public adjustLayoutOfReplaceGroup():void{
        // 调整内部子GroupObj
        var len=this.children.length;
        for(var i=0;i<len;i++){
            var obj:ObjBase=this.children[i];
            if(obj instanceof GroupObj){
                var grp: GroupObj=<GroupObj>obj;
                if(grp){
                    grp.adjustLayoutOfReplaceGroup();
                }
            }
        }
    }
    
    
    //SJG_MARK_APPEND--------------------


}//SJG_MARK_END-------------------------
